// 导航守卫
import router from '@/router'
import store from '@/store'
import Nprogress from 'nprogress'
import 'nprogress/nprogress.css'
import { cancelAll } from '@/utils/request.js'

// 前置守卫
const pageArr = ['/404', '/login'] // 记录不需要登录的  // 记录需要登录页面的path （记录不需要登录页面的path） ,选择少的一方
router.beforeEach(async(to, from, next) => {
  console.log('beforeEach')
  // 取消上一页面所有请求
  cancelAll()
  // 如果已登录就不能再进登陆页，有些页面需要登录才可进入
  //   限制部分页面需要登录才可访问  1：使用白名单   2：使用路由元
  /*
  判断是否有token
      有token
         去的页面是登录页
             跳转到首页
          不是登录页
             正常进入
      没token
          去的页面需要登录（白名单，记录哪些页面不需要登录）
              跳转到登录页
           去的页面不需要登录
              正常进入

*/
  Nprogress.start()
  if (store.getters.token) {
    if (to.path.toLowerCase() === '/login') {
      next('/')
    } else {
      // 验证token,获取个人用户信息
      // 如果有用户信息不用获取，没有才获取
      if (!store.state.user.userInfo.userId) {
        // /employees
        await store.dispatch('user/getUserInfo')
        // 因为动态添加的路由不能立马使用，再经过一次导航守卫就可正常使用了
        next(to.fullPath)
      } else {
        // 有用户信息正常进入
        next()
      }
    }
  } else {
    if (pageArr.includes(to.path.toLowerCase())) {
      next()
    } else {
      // 建立 都加上encodeURIComponent ie不支持中文字符
      next(`/login?redirect=${encodeURIComponent(to.fullPath)}`)
    }
  }

  //   next()
  Nprogress.done()
})

// 后置守卫  /home===/home?id=123
router.afterEach((to, from) => {
  console.log('afterEach')
  // window.scrollTo(0, 0)
  Nprogress.done()
})
//
router.beforeResolve((to, from, next) => {
  console.log('beforeResolve')
  next()
})
